package com.strange3.utils.modules
{
	import com.strange3.utils.modules.ModuleCreator;
	
	public class ModuleCreatorsManager
	{
		// tablica asocjacyjna do szybkiego zwracania obiektów po kluczu "id"
		protected var _assocElementsById:Object;
		
		// tablica asocjacyjna do szybkiego zwracania obiektów po kluczu "source url"
		protected var _assocElementsBySource:Object;
		
		// zwyka ablica indekowana, do zwracania elementów po indeksie dodania
		protected var _indexedElements:Array;
		
		public function ModuleCreatorsManager()	{
			_assocElementsById = new Object();
			_assocElementsBySource = new Object();
			_indexedElements = new Array();
		}
		
		public function add(m:ModuleCreator):void {
			_assocElementsById[m.id] = m;
			_assocElementsBySource[m.url] = m;
			_indexedElements.push(m);
			
		}
		
		
		public function getModuleById(id:String):ModuleCreator {
			if(this._assocElementsById[id]) {
				return this._assocElementsById[id] 
			} else { 
				return null;
			}
		}
		
		public function getModuleBySource(source:String):ModuleCreator {
			if(this._assocElementsBySource[source]) {
				return this._assocElementsBySource[source] 
			} else { 
				return null;
			}
		}
		
		public function getModuleAt(index:int):ModuleCreator {
			if(this._indexedElements[index]) {
				return this._indexedElements[index] 
			} else { 
				return null;
			}
		}
		
		/**
		 * funkcja zwracajaca liczbe elementow w managerze 
		 * @return 
		 * 
		 */
		public function get length():int {
			return this._indexedElements.length;
		}
	}
}